package org.asiainfo.system.service;

import java.util.List;

import cn.hutool.core.lang.tree.Tree;
import org.asiainfo.system.domain.vo.SysCategoryVo;
import org.asiainfo.system.domain.bo.SysCategoryBo;
import org.asiainfo.system.domain.SysCategory;
import com.mybatisflex.core.service.IService;

/**
 * 分类字典Service接口
 *
 * @author makejava
 */
public interface SysCategoryService extends IService<SysCategory> {

    /**
     * 通过categoryId查询单条数据
     *
     * @param categoryId 主键
     * @return 实例对象
     */
    SysCategoryVo queryById(Long categoryId);

    /**
     * 查询
     *
     * @param sysCategoryBo 筛选条件
     * @return 查询结果
     */
    List<SysCategoryVo> queryList(SysCategoryBo sysCategoryBo);

    /**
     * 新增数据
     *
     * @param sysCategoryBo 实例对象
     * @return 实例对象
     */
    List<SysCategoryVo>  insertByBo(SysCategoryBo sysCategoryBo);

    /**
     * 修改数据
     *
     * @param sysCategoryBo 实例对象
     */
    Boolean updateByBo(SysCategoryBo sysCategoryBo);

    /**
     * 通过主键删除数据
     *
     * @param categoryId 主键
     */
    Boolean deleteWithValidById(Long categoryId);

    /**
     * 校验分类名称是否唯一
     *
     * @param sysCategoryBo 实例对象
     * @return 结果
     */
    Boolean checkCategoryCodeUnique(SysCategoryBo sysCategoryBo);

    /**
     * 判断分类字典下是否有子节点
     *
     * @param categoryId 主键
     * @return 结果
     */
    Boolean hasChildByCategoryId(Long categoryId);

    /**
     * 获取分类字典列表
     *
     * @param sysCategoryBo 实体
     * @return 列表
     */
    List<SysCategoryVo> selectCategoryList(SysCategoryBo sysCategoryBo);

    /**
     * 获取分类字典树列表
     *
     * @param sysCategoryVos 分类字典列表
     * @return 树结构
     */
    List<Tree<Long>> buildCategoryTreeSelect(List<SysCategoryVo> sysCategoryVos);
}
